Allow expressions in facet specs even when some variables are not available on some layers - #3757
Merged
yutannihilation merged 11 commits intoJan 25, 2020
Conversation
3 tasks
hadley
approved these changes
Jan 22, 2020
Member
Author
|
May I merge this? I'll keep this open for a day or so in case we need further discussion. Feel free to merge if you need to run revdepchecks early. |
Member
|
You can merge at your leisure - we won't run revdeps before after the conf anyway |
Member
Author
|
Sure. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
(Cherry-picked version of #3735 for v3.3.0-rc branch)
Fix #2963
Background
Not all variables in a facet spec are available on all the layers. A solution suggested on r-lib/rlang#888 (comment) is:
Main change
This PR injects such an active bindings on the column names of all the plot data so that we can let
eval_facet()fail gracefully.eval_facet()evaluates facet specs in these two steps:NULL. In this case, no error happens even if the symbol is not available on all the layers.This PR changes only step 2, so I expect this doesn't affect most of the existing code. Note that, while step 2 can also handle symbols, we still need step 1 to issue a friendly error ("At least one layer must contain all faceting variables") when no layer contain the variable.
Created on 2020-01-23 by the reprex package (v0.3.0)
Minor change
envargument ofeval_facet(). This is not necessary, but done in order to avoid confusion. I believe all facet specs are converted to quosures and bare expressions are not allowed, which meansenvis always ignored oneval_tidy().